package Day_004_T21;


/**
 * @author XIAOLIANG
 * @ClassName Solution.java

 * @createTime 2021年01月18日 17:28:00
 * https://leetcode-cn.com/problems/merge-two-sorted-lists/
 *
 * 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 
 *
 *  
 *
 * 示例 1：
 * 输入：l1 = [1,2,4], l2 = [1,3,4]
 * 输出：[1,1,2,3,4,4]
 *
 * 示例 2：
 * 输入：l1 = [], l2 = []
 * 输出：[]
 *
 * 示例 3：
 * 输入：l1 = [], l2 = [0]
 * 输出：[0]
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/merge-two-sorted-lists
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 */
public class Solution {
	public ListNode mergeTwoLists(ListNode l1, ListNode l2) {

		//创建一个空的链表
		ListNode hard = new ListNode();
		ListNode curr = hard;

		if (l1 == null) {
			return l2;
		}
		if (l2 == null) {
			return l1;
		}


		while (true) {
			//判断一方为空
			if (l1 == null) {
				curr.next = l2;
				break;
			}
			if (l2 == null) {
				curr.next = l1;
				break;
			}


			if (l1.val < l2.val) {
				curr.next = l1;    //curr的next 指向l1的指向的节点
				l1 = l1.next;  //l1 向后移动一位
			} else {
				curr.next=l2;
				l2 = l2.next;
			}

			curr = curr.next;  //指向下一个节点

		}

		return hard.next;

	}

}
